JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它使用文本格式表示数据结构,通过键值对来存储信息,广泛用于 Web 开发、移动应用、API 交互、数据传输等领域。
一、JSON 基础结构
-
对象(Object):用
{ }包围,以键值对的形式存储数据。键必须是字符串类型,值可以是字符串、数字、布尔值、对象、数组或 null。{ "name": "Alice", "age": 25, "isStudent": false, "contact": { "email": "alice@example.com", "phone": "123-456-7890" } } -
数组(Array):用
[ ]包围,包含多个值,可以是任意类型。常用于存储有序的数据集合。[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] -
值类型:
- 字符串(String):必须使用双引号
"包裹。比如"name": "Alice" - 数字(Number):可以是整数或浮点数,比如
"age": 25。 - 布尔值(Boolean):
true或false,比如"isStudent": false - 空值(null):用于表示空或未知值,比如
"nickname": null
- 字符串(String):必须使用双引号
二、JSON 的应用场景
- 数据传输:JSON 是前后端数据交换的常见格式,特别是在 RESTful API 和 WebSocket 传输中。例如,从服务器获取用户信息可以以 JSON 格式返回数据,前端解析后展示给用户。
- 配置文件:JSON 文件被广泛用作应用的配置文件,如
package.json(Node.js)、composer.json(PHP)、config.json等,方便应用启动时读取配置信息。 - 跨平台数据共享:JSON 格式不依赖于具体编程语言,因此在不同编程语言之间传输数据时也经常用到。例如,JavaScript、Python、Java 等都支持 JSON 解析。
- 存储数据:对于一些简单的数据存储场景,JSON 文件可以用作数据库的替代品(如 NoSQL 数据库 MongoDB 的数据格式就是类似 JSON 的 BSON 格式)。
三、JSON 在前后端交互中的使用
1. 使用 JSON 发送请求
在前端,我们可以通过 AJAX 或 Fetch API 发送 JSON 数据到后端。例如,在 JavaScript 中:
// 使用 Fetch API 发送 JSON 数据到服务器
fetch("https://example.com/api", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
username: "Alice",
age: 25
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
2. 使用 JSON 解析响应
在前端接收后端的 JSON 响应数据时,可以直接解析并使用:
// 解析 JSON 响应
fetch("https://example.com/api/user/123")
.then(response => response.json()) // 将响应解析为 JSON 对象
.then(data => {
console.log("User Name:", data.name);
console.log("User Age:", data.age);
});
四、JSON 解析与生成
-
JavaScript:使用
JSON.parse()和JSON.stringify()。const jsonString = '{"name": "Alice", "age": 25}'; const user = JSON.parse(jsonString); // 解析为 JavaScript 对象 const newUser = { name: "Bob", age: 30 }; const newJsonString = JSON.stringify(newUser); // 转为 JSON 字符串 -
Python:使用
json模块中的json.loads()和json.dumps()。import json # 解析 JSON 字符串 json_str = '{"name": "Alice", "age": 25}' user = json.loads(json_str) # 生成 JSON 字符串 new_user = {"name": "Bob", "age": 30} new_json_str = json.dumps(new_user) -
Java:使用
org.json或Gson库。import org.json.JSONObject; // 解析 JSON 字符串 String jsonString = "{\"name\":\"Alice\", \"age\":25}"; JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("name"); // 生成 JSON 字符串 JSONObject newJson = new JSONObject(); newJson.put("name", "Bob"); newJson.put("age", 30);
五、JSON 的高级用法
-
嵌套 JSON:JSON 对象和数组可以嵌套,构建更复杂的数据结构。例如,以下 JSON 包含一个用户列表:
{ "users": [ {"id": 1, "name": "Alice", "friends": [{"id": 2, "name": "Bob"}]}, {"id": 3, "name": "Charlie", "friends": []} ] } -
动态属性名:有些场景下,属性名可能是动态的,比如以某种 ID 作为键:
{ "123": {"name": "Alice", "age": 25}, "456": {"name": "Bob", "age": 30} } -
条件结构:JSON 本身没有条件判断功能,但在使用 JSON 配置时,可以通过结构设计实现条件效果,例如通过
type字段来决定数据的不同用途。 -
序列化与反序列化:在编程语言中,JSON 可以将复杂的对象转换为字符串(序列化),并在需要时将字符串还原为对象(反序列化)。这在存储或传输对象数据时非常有用。
六、JSON 与其他数据格式的对比
| 格式 | 特点 | 应用场景 |
|---|---|---|
| JSON | 易读、跨平台、结构化 | Web、API 传输数据 |
| XML | 层次结构清晰、支持复杂描述 | 配置文件、SOAP 协议 |
| YAML | 易读(无引号与花括号),注释支持良好 | 配置文件 |
| BSON | JSON 的二进制格式,支持更多数据类型 | MongoDB、存储场景 |
| Protocol Buffers | 高效的二进制数据传输,适合大型数据 | Google 内部、数据流 |
JSON 因其简单和高效,成为 API 数据传输的主流格式,但 XML 和 Protocol Buffers 在特定场景下也具有优势。
七、JSON 的常见问题与解决方法
- 格式错误:JSON 的语法要求严格,比如必须使用双引号、不能有末尾逗号。可通过 JSON 验证工具检查格式。
- 大小写敏感:JSON 属性名是大小写敏感的,比如
Name和name是不同的属性。 - 性能问题:对于大数据量的 JSON,解析和序列化会影响性能,可以使用流式解析或二进制格式(如 BSON)优化性能。
- 数据类型限制:JSON 不支持函数、日期、
NaN等类型。日期通常使用字符串格式(ISO 8601)表示,比如"2024-11-06T16:24:58Z"。 - 跨域问题:前端使用 AJAX 请求 JSON 数据时,如果涉及跨域问题,可以在后端通过
CORS解决。
JSON 是现代数据传输和存储的基础格式,具有灵活性和可读性,尤其在 Web 应用、移动应用以及分布式系统中使用广泛。掌握 JSON 的基本结构和高级用法,将有助于提高数据交互的效率和稳定性。
项目分区导航: http协议-websocket协议 ⬅️ | 02-JSON | ➡️ WebSocket实战篇
💬 评论